import {
    app,
    BrowserWindow,
    BrowserWindowConstructorOptions,
    ipcMain
} from 'electron'


class Window {
    // 成员变量
    main: BrowserWindow | null // 窗口实例
    windowOptions: BrowserWindowConstructorOptions | null
    constructor(options: BrowserWindowConstructorOptions) {
        this.main = null
        this.windowOptions = options // 主窗口
    }
    // 创建窗口
    createWindow() {
        this.main = new BrowserWindow(this.windowOptions)
        this.main.loadURL('http://localhost:8080')
        this.main.webContents.openDevTools()
        app.on('activate', () => {
            if (BrowserWindow.getAllWindows().length === 0) this.createWindow()
        })
    }
    // 监听窗口事件
    listen() {
        // 窗口最小化
        this.minimizeWin()
        // 窗口最大化
        this.restoreOrMaxWin()
        // 窗口关闭
        this.closeWindow()
        // 窗口可拖动
        this.dragWindow()
    }
    // 窗口最小化
    minimizeWin() {
        ipcMain.on('window-min', (event, args) => {
            console.log(args, '传递过来的值')
            this.main.minimize()
        })
    }
    // 窗口最大化/还原
    restoreOrMaxWin() {
        ipcMain.on('window-max', () => {
          // 如果当前窗口已经最大化,就还原
          if (this.main.isMaximized()) {
              this.main.restore()
          } else {
              this.main.maximize()
          }
        })
    }
    // 窗口关闭
    closeWindow() {
        ipcMain.on('window-close', () => {
           this.main.close()
       })
    }
    // 窗口可拖动
    dragWindow() {
        ipcMain.on('move-application', (event, position) => {
          this.main.setPosition(position.x, position.y)
       })
    }
}

export default Window